package com.bbva.gptf.back.servicio.contrato;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.bbva.gptf.back.dominio.Tgpt016Contrato;
import com.bbva.gptf.back.transformador.TransformadorContrato;
import com.bbva.gptf.back.util.OrdenaContratos;
import com.bbva.gptf.dto.bean.Contrato;
import com.bbva.gptf.dto.servicio.contrato.ServicioContrato;
import com.bbva.jee.arq.spring.core.httpService.HttpService;

@HttpService(serviceName = "servicioContratoHttp")
public class ServicioContratoImpl implements ServicioContrato {

	@Autowired
	private TransformadorContrato transformadorContrato;
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.bbva.gptf.dto.servicio.contrato.ServicioContrato#obtenerContratos
	 * (java.math.BigDecimal)
	 */
	@Override
	public List<Contrato> obtenerContratos(final BigDecimal cdGestor) {

		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.bbva.gptf.dto.servicio.contrato.ServicioContrato#obtenerContratos
	 * (java.math.BigDecimal, java.math.BigDecimal)
	 */
	@Override
	public List<Contrato> obtenerContratos(final BigDecimal cdClasifDelta,
			final String cdGestor) {
		// TODO Auto-generated method stub
		final List<Tgpt016Contrato> entityContratos = Tgpt016Contrato
				.obtenerContratos(cdClasifDelta, cdGestor);
		final List<Contrato> contratos = new ArrayList<Contrato>();

		if (entityContratos != null) {
			for (final Tgpt016Contrato lista : entityContratos) {
				final Contrato contrato = transformadorContrato.convert(lista);
				contratos.add(contrato);
			}
		}
		Collections.sort(contratos, new OrdenaContratos());
		return contratos;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.bbva.gptf.dto.servicio.contrato.ServicioContrato#
	 * obtenerContratosMancuerna(java.math.BigDecimal, java.lang.String)
	 */
	@Override
	public List<Contrato> obtenerContratosMancuerna(
			final BigDecimal cdClasifDelta, final String cdBancomer,
			final String cdBancomerMancuerna) {
		// TODO Auto-generated method stub
		final List<Tgpt016Contrato> entityContratos = Tgpt016Contrato
				.obtenerContratosMancuerna(cdClasifDelta, cdBancomer,
						cdBancomerMancuerna);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (entityContratos != null) {
			for (final Tgpt016Contrato lista : entityContratos) {
				final Contrato contrato = transformadorContrato.convert(lista);
				contratos.add(contrato);
			}
			Collections.sort(contratos, new OrdenaContratos());
			return contratos;
		}
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.bbva.gptf.dto.servicio.contrato.ServicioContrato#
	 * obtenerContratosPorListaContrato(java.math.BigDecimal)
	 */
	@Override
	public List<Contrato> obtenerContratosPorListaContrato(
			final BigDecimal cdLista) {
		// TODO Auto-generated method stub
		final List<Tgpt016Contrato> entityContratos = Tgpt016Contrato
				.obtenerContratosPorListaContrato(cdLista);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (entityContratos != null) {
			for (final Tgpt016Contrato entContrato : entityContratos) {
				final Contrato contrato = transformadorContrato
						.convert(entContrato);
				contratos.add(contrato);
			}
			Collections.sort(contratos, new OrdenaContratos());
			return contratos;
		}
		return null;
	}

	public void setTransformadorContrato(
			final TransformadorContrato transformadorContrato) {
		this.transformadorContrato = transformadorContrato;
	}

	@Override
	public List<Contrato> obtieneContratosDisponiblesPorListaContrato(
			final BigDecimal cdClasifDelta, final String cdBancomer,
			final BigDecimal cdLista) {
		final List<Tgpt016Contrato> entityContratos = Tgpt016Contrato
				.obtieneContratosDisponiblesPorListaContrato(cdClasifDelta,
						cdBancomer, cdLista);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (entityContratos != null) {
			for (final Tgpt016Contrato entContrato : entityContratos) {
				final Contrato contrato = transformadorContrato
						.convert(entContrato);
				contratos.add(contrato);
			}
			Collections.sort(contratos, new OrdenaContratos());
			return contratos;
		}
		return null;
	}

	@Override
	public List<Contrato> obtieneContratosPorGrupoDelta(
			final BigDecimal cdGrupoDelta, final String cdBancomer,
			final String cdMancuerna) {
		final List<Tgpt016Contrato> listaContratos = Tgpt016Contrato
				.obtieneContratosPorGrupoDelta(cdGrupoDelta, cdBancomer,
						cdMancuerna);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (listaContratos != null) {
			for (final Tgpt016Contrato entContrato : listaContratos) {
				final Contrato contrato = transformadorContrato
						.convert(entContrato);
				contratos.add(contrato);
			}
		}
		Collections.sort(contratos, new OrdenaContratos());
		return contratos;
	}

	public Contrato obtenContratoById(BigDecimal cdContrato) {
		Contrato contrato = transformadorContrato.convert(Tgpt016Contrato
				.findTgpt016Contrato(cdContrato));
		return contrato;
	}

	public Contrato obtenContratoByIdAndGestor(final BigDecimal cdContrato,
			final String cdBancomer, final String cdMancuerna) {
		Contrato contrato = transformadorContrato
				.convert(Tgpt016Contrato.findContratoByIdAndGestor(cdContrato,
						cdBancomer, cdMancuerna));
		return contrato;
	}
	
	@Override
	public List<Contrato> obtieneContratosPorGrupoDeltaYTipoMercado(
			BigDecimal cdGrupoDelta, BigDecimal cdMercado) {
		final List<Tgpt016Contrato> listaContratos = Tgpt016Contrato
				.obtieneContratosPorGrupoDeltaYTipoMercado(cdGrupoDelta,
						cdMercado);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (listaContratos != null) {
			for (final Tgpt016Contrato entContrato : listaContratos) {
				final Contrato contrato = transformadorContrato
						.convert(entContrato);
				contratos.add(contrato);
			}
		}
		Collections.sort(contratos, new OrdenaContratos());
		return contratos;
	}
	
	@Override
	public List<Contrato> obtenerContratosPorClasifDeltaYTipoMercado(
			BigDecimal cdClasifDelta, BigDecimal cdMercado) {
		final List<Tgpt016Contrato> entityContratos = Tgpt016Contrato
				.obtenerContratosPorTipoMercado(cdClasifDelta, cdMercado);
		final List<Contrato> contratos = new ArrayList<Contrato>();
		if (entityContratos != null) {
			for (final Tgpt016Contrato lista : entityContratos) {
				final Contrato contrato = transformadorContrato.convert(lista);
				contratos.add(contrato);
			}
		}
		Collections.sort(contratos, new OrdenaContratos());
		return contratos;
	}

}
